package com.dxf.chepter09

/**
 *  match 模式匹配 比java的switch 更加强大
 *
 *  语法:
 *    采用match 关键字 每个分支采用case 关键字进行声明,当需要匹配时,会从第一个case分支开始,
 *    如果匹配成功.执行对应逻辑代码,匹配失败.继续执行下一个分支判断,如果所有case都不匹配
 *    执行 case _ 分支,类似java中的default
 *
 *    ======================================
 *
 *    注意事项
 *    1 如果没有匹配到 异常  scala.MatchError
 *    2 => 后面可以是代码块
 *    3 case 匹配可以任意类型
 *    4 case 可以对一个点的匹配,也可以对一个范围匹配(可以if语句) ==> 守卫
 *
 *
 *    =========================================
 *
 *
 *    守卫:
 *
 *    如果想要表达匹配某个范围的数据,需要再匹配模式中增加条件守卫
 *
 *    即 scala的match 可以对一个点的匹配,也可以对一个范围的匹配
 *
 *
 *
 *
 *
 *    可以在case 后面添加语法    case _ if oper.toString.equals("8") => println("ok8")    -->守卫  oper.toString.equals("8")
 *
 *
 *
 *
 *
 *
 */
object T108_模式匹配match_守卫 {


  def main(args: Array[String]): Unit = {

    for (ch <- "+-3!") {
      var sign = 0
      var digit = 0
      ch match {
        case '+' => sign = 1
        case '-' => sign = -1
          //case _ 表示遍历的默认值,即每一个值都要 在这个case中走一遍,如果能执行 => 后面语句,就截止
        case _ if ch.toString.equals(3) => digit = 3
        case _ if ch > 1000 => println("ch>10")
        case _ => sign = 2
        case _ => digit = 2

      }
      //ch    sign   digit
      // +     1     0
      // -    -1     0
      // 3     0     3
      // !     2     0

      println(ch+" "+ sign+" "+ digit)
    }


  }


}
